package com.redhat.developer.model;

import java.util.List;

/**
 * A model capable of performing predictions.
 * This can be using different kinds of underlying functions, like DMN, PMML, or any other machine learning model.
 */
public interface Model {

    /**
     * perform a batch of predictions, given a batch of inputs.
     * @param inputs the input batch
     * @return a batch of prediction outputs
     */
    List<PredictionOutput> predict(List<PredictionInput> inputs);

    /**
     * fetch the data distribution associated to this model
     * @return the data distribution
     */
    DataDistribution getDataDistribution();

    /**
     * get the shape of inputs expected by this model
     * @return a synthetic prediction input (with fake or null values)
     */
    PredictionInput getInputShape();

    /**
     * get the shape of prediction outputs generated by this model
     * @return a synthetic prediction output (with fake or null values)
     */
    PredictionOutput getOutputShape();
}
